<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="text" id="inp">
    <button id="add-btn">新增</button>
    <button id="search-btn">查询</button>
    <ol></ol>

    <script>
        // 获取元素
        const inp = document.querySelector('#inp');
        const addBtn = document.querySelector('#add-btn');
        const searchBtn = document.querySelector('#search-btn');
        const ol = document.querySelector('ol');

        const userList = [
            // 'zhangsan',
            // 'lisi',
            // 'lisi1',
        ];

        // 记录正在修改的索引
        let editingIdx = -1;

        function render (users) {
            ol.innerHTML = '';
            for (let i = 0; i < users.length; i++) {
                const user = users[i];
                const li = document.createElement('li');

                const delBtn = document.createElement('button');
                delBtn.innerText = '删除';
                delBtn.addEventListener('click', function () {
                    // 1. 操作数据
                    // arr.splice
                    userList.splice(i, 1);
                    // 2. 调用render渲染数据
                    render(userList);
                });

                // 修改
                if (editingIdx !== i) {  // 没有在修改中的li
                    // 没编辑的时候才有文字
                    li.innerText = user;
                    const editBtn = document.createElement('button');
                    editBtn.innerText = '修改';
                    editBtn.addEventListener('click', function () {
                        // 1. 改数据
                        editingIdx = i;
                        // 2. 渲染
                        render(userList);
                    });
                    li.appendChild(editBtn);
                } else { // 修改中的li
                    // 编辑的时候是输入框
                    const editInp = document.createElement('input');
                    editInp.value = user;
                    li.appendChild(editInp);
                    // 确认按钮
                    const editOkBtn = document.createElement('button');
                    editOkBtn.innerText = '确认';
                    editOkBtn.addEventListener('click', function () {
                        // 1. 操作数据
                        userList[i] = editInp.value;
                        editingIdx = -1;
                        // 2. 渲染
                        render(userList);
                    });
                    li.appendChild(editOkBtn);
                }

                li.appendChild(delBtn);
                ol.appendChild(li);
            }
        }

        render(userList);

        addBtn.addEventListener('click', function () {
            // 1. 操作数据
            userList.push(inp.value);
            // 2. 调用render渲染数据
            render(userList);
        });

        searchBtn.addEventListener('click', function () {
            // 1. 操作数据
            const showingList = userList.filter(function (item) { // 'zhangsan'
                return item.includes(inp.value);
            });
            // 2. 调用render渲染数据
            render(showingList);
        });

    </script>
</body>
</html>